public class No046 {
    /**
     * 题目:给定一个数字，我们按照如下规则把它翻译为字符串：
     * 0翻译成“a”，1翻译成“b”，……，11翻译成“l”，……，25翻译成z，一个数字可能有多个翻译。
     * 例如，12258有5种不同的翻译，分别是“bccfi”、“bwfi”、“bczi”、“mcfi”和“mzi”。
     * 请编程实现一个函数，用来计算一个数字有多少种不同的翻译方法。
     */

    public static int GetTranslationCount(int number) {
        if (number < 0) return 0;
        String str = Integer.toString(number);
        if (str.length() == 1) return 1;
        int count;
        // 记录从最右到当前位有多少种翻译方法
        int[] counts = new int[str.length()];
        counts[str.length() - 1] = 1;
        for (int i = str.length() - 2; i >= 0; i--) {
            count = counts[i + 1];
            int digit1 = str.charAt(i) - '0';
            int digit2 = str.charAt(i + 1) - '0';
            int converted = digit1 * 10 + digit2;
            if (converted >= 10 && converted <= 25) {
                if (i < str.length() - 2) {
                    count += counts[i + 2];
                } else count++;
            }
            counts[i] = count;
        }
        return counts[0];
    }

    public static void main(String[] args) {
        System.out.println(GetTranslationCount(12258));
    }
}
